/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package MiddleLayer;

/**
 *
 * @author ThanhTri
 */
public class Card {

    static String resources[] = {
        "Images/Cards/2s.gif",          //2 bích
        "Images/Cards/2c.gif",          //2 chuồn
        "Images/Cards/2d.gif",          //2 rô
        "Images/Cards/2h.gif",          //2 cơ
        "Images/Cards/3s.gif",
        "Images/Cards/3c.gif",
        "Images/Cards/3d.gif",
        "Images/Cards/3h.gif",
        "Images/Cards/4s.gif",
        "Images/Cards/4c.gif",
        "Images/Cards/4d.gif",
        "Images/Cards/4h.gif",
        "Images/Cards/5s.gif",
        "Images/Cards/5c.gif",
        "Images/Cards/5d.gif",
        "Images/Cards/5h.gif",
        "Images/Cards/6s.gif",
        "Images/Cards/6c.gif",
        "Images/Cards/6d.gif",
        "Images/Cards/6h.gif",
        "Images/Cards/7s.gif",
        "Images/Cards/7c.gif",
        "Images/Cards/7d.gif",
        "Images/Cards/7h.gif",
        "Images/Cards/8s.gif",
        "Images/Cards/8c.gif",
        "Images/Cards/8d.gif",
        "Images/Cards/8h.gif",
        "Images/Cards/9s.gif",
        "Images/Cards/9c.gif",
        "Images/Cards/9d.gif",
        "Images/Cards/9h.gif",
        "Images/Cards/ts.gif",
        "Images/Cards/tc.gif",
        "Images/Cards/td.gif",
        "Images/Cards/th.gif",
        "Images/Cards/js.gif",
        "Images/Cards/jc.gif",
        "Images/Cards/jd.gif",
        "Images/Cards/jh.gif",
        "Images/Cards/qs.gif",
        "Images/Cards/qc.gif",
        "Images/Cards/qd.gif",
        "Images/Cards/qh.gif",
        "Images/Cards/ks.gif",
        "Images/Cards/kc.gif",
        "Images/Cards/kd.gif",
        "Images/Cards/kh.gif",
        "Images/Cards/as.gif",          //Ace là quân có giá trị lớn nhất
        "Images/Cards/ac.gif",
        "Images/Cards/ad.gif",
        "Images/Cards/ah.gif",
    };

    private int id = -1;
    private int suit = -1;//Bích, chuồn, rô, cơ
    private int type = -1;//2, 3, 4, .., Q, K, A

    private boolean bIsUsed = false;
    private String resourcePath = null;

    /**
     * Truyền vào id theo số thứ tự gốc
     */
    Card(int id)
    {
        this.id = id;
        this.suit = id % 4;
        this.type = id / 4;
        this.resourcePath = resources[id];
    }

    /**
     * @param id the id to set
     */
    public void setId(int id) {
        this.id = id;
        this.suit = id % 4;
        this.type = id / 4;
        this.resourcePath = resources[id];
    }

    /**
     * @return the bIsUsed
     */
    public boolean isbIsUsed() {
        return bIsUsed;
    }

    /**
     * @param bIsUsed the bIsUsed to set
     */
    public void setbIsUsed() {
        this.bIsUsed = true;
    }

    /**
     * @return the id
     */
    public int getId() {
        return id;
    }

    /**
     * @return the suit
     */
    public int getSuit() {
        return suit;
    }

    /**
     * @return the type
     */
    public int getType() {
        return type;
    }

    /**
     * @return the resourcePath
     */
    public String getResourcePath() {
        return resourcePath;
    }

    //Trả về cho biết card kia có cùng loại (cơ, rô, chuồn, bích) với card này không
    public boolean isSameSuit(int cardID)
    {
        if(cardID % 4 != this.suit)
            return false;

        return true;
    }
    static public boolean isSameSuit(int cardIDsrc, int cardIDdest)
    {
        if((cardIDsrc % 4) != (cardIDdest % 4))
            return false;

        return true;
    }

    //Trả về cho biết card kia có cùng type (Ace, 2, 3, ..., Q, K) với card này không
    public boolean isSameType(int cardID)
    {
        if(cardID / 4 != this.type)
            return false;

        return true;
    }
    static public boolean isSameType(int cardIDsrc, int cardIDdest)
    {
        if((cardIDsrc / 4) != (cardIDdest / 4))
            return false;

        return true;
    }

    //Kiểm tra xem quân bài này có phải là quân Cơ hay không
    static public boolean isHeartCard(int cardID)
    {
        if(cardID % 4 == 3)
            return true;

        return false;
    }

    //Kiểm tra xem quân bài này có phải là 2 chuồn hay không
    static public boolean isTwoOfClubs(int cardID)
    {
        if(cardID % 4 == 1 && cardID / 4 == 0)
            return true;

        return false;
    }

    //Kiểm tra xem quân bài này có phải là 2 chuồn hay không
    static public boolean isQueenOfSpades(int cardID)
    {
        if(cardID % 4 == 0 && cardID / 4 == 10)
            return true;

        return false;
    }

    //Kiểm tra xem quân bài này có phải là 2 chuồn hay không
    static public boolean isTwoOfDiamonds(int cardID)
    {
        if(cardID % 4 == 0 && cardID / 4 == 2)
            return true;

        return false;
    }

    /**
     * Chuyển đổi từ id cardGUI sang id của lớp card bên dưới
     * @param iCardGUI_ID: ID của lớp cardGUI bên trên truyền xuống
     */
    static public int convertCardGUI_IDToCard_ID(int iCardGUI_ID)
    {
        int iType = iCardGUI_ID % 13;
        int iSuit = iCardGUI_ID / 13;

        return iType * 4 + iSuit;
    }


    /**
     * Chuyển đổi id của card này thành giống id của lớp CardGUI
     *
     * @param iCardID: ID của đối tượng thuộc lớp Card
     * @return: ID tương ứng của đối tượng thuộc lớp CardGUI
     */
     
    static public int convertToCardGUI_ID(int iCardID)
    {
        int iType = iCardID / 4;
        int iSuit = iCardID % 4;
        return iType + iSuit * 13;
    }
}
